home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / listings / v_13_10 / kientzle / smscale.c < prev   
Text File  |  1995-08-14  |  670b  |  31 lines

  1. Listing 3
  2.  
  3. void scale_smooth
  4.         (PIXEL *src, int srcWidth,
  5.         PIXEL *dest, int destWidth)
  6. {
  7.   int pixelFrac=destWidth;
  8.   int srcPos=0, destPos=0;
  9.  
  10.   while(destPos < destWidth) {
  11.     PIXEL p = 0;
  12.     int numerator = 0;
  13.  
  14.     /* Handle whole pixels first */
  15.     while (numerator+pixelFrac
  16.        <= srcWidth) {
  17.       numerator += pixelFrac;
  18.       p += pixelFrac*src[srcPos++];
  19.       pixelFrac = destWidth;
  20.     }
  21.     if (numerator < srcWidth)
  22.     { /* Partial pixel? */
  23.       p += (srcWidth-numerator)
  24.              * src[srcPos];
  25.       pixelFrac -= srcWidth
  26.                    - numerator;
  27.     }
  28.     dest[destPos++]= p / srcWidth;
  29.   }
  30. }
  31.